package main

import (
	"bufio"
	"bytes"
	"fmt"
	"os"
	"strconv"
)

// 判断输入的字符串是否为回文
func home_1() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("请输入一个字符串: ")
	input, _ := reader.ReadString('\n') // 读取一行输入，包括换行符
	//input = strings.Trim(input, "\n")       // 去掉末尾的换行符
	input = input[:len(input)-2] //还要去掉字符串末尾的'\0'

	var str string //用str变量来存取输入的字符串的逆转，默认为空字符

	for _, ch := range input {
		str = string(ch) + str //遍历字符串，每次先将得到的rune字符ch转换为字符串型，然后拼接在当前的str前面
		fmt.Println(str)
	}
	//fmt.Println(str)
	if str == string(input) {
		fmt.Println("该字符串是回文！")
	} else {
		fmt.Println("该字符串不是回文。")
	}
}

// 实现字符串压缩  “aaabbcccd” --> a3b2c3d1
func home_2() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("请输入一个字符串: ")
	input, _ := reader.ReadString('\n') // 读取一行输入，包括换行符
	//input = strings.Trim(input, "\n")   // 去掉末尾的换行符
	input = input[:len(input)-2]
	leng := len(input)

	var temp_1 string
	var str string

	count := 1
	for i := 1; i < leng; i++ {
		if input[i] == input[i-1] {
			count++
		} else {
			temp_1 = string(input[i-1]) + strconv.Itoa(count)
			fmt.Println("temp_1 is:", temp_1)
			str += temp_1
			count = 1
			//continue //结束本次循环  开启下一次循环
		}
		//temp_1 = string(input[i-1]) + strconv.Itoa(count)
		//fmt.Println(temp_1)
		//str += temp_1
	}

	fmt.Println(str)
}

// compress 使用 RLE算法压缩字符串
func compress(s string) string {
	if len(s) == 0 {
		return ""
	}

	var buf bytes.Buffer
	count := 1
	for i := 1; i <= len(s); i++ {
		if i < len(s) && s[i] == s[i-1] {
			count++
		} else {
			buf.WriteByte(s[i-1])
			buf.WriteString(strconv.Itoa(count))
			count = 1
		}
	}
	return buf.String()
}

func main() {
	//original := "aaabbbcccaaa"
	home_2()
	//fmt.Printf("Original: %s\n", original)
	//fmt.Printf("Compressed: %s\n", compressed)
}
